home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / kcl.lha / h / pio.h < prev    next >
C/C++ Source or Header  |  1987-06-04  |  5KB  |  267 lines

  1. /*
  2. (C) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
  3. */
  4.  
  5.  
  6.     /**********************************************************
  7.      * Copyright (C) Data General Corporation, 1982-1983.      *
  8.      * All Rights Reserved.                                    *
  9.      * Licensed Material-Property of Data General Corporation. *
  10.      **********************************************************/
  11.  
  12.  
  13.  
  14. /*****************   number of allowed files ******************/
  15.  
  16. #define NFILZ    64
  17.  
  18. /******************   AOS_VS call packets *********************/
  19.  
  20. #define _uchar unsigned char
  21.  
  22.  
  23. struct blk_pkt {
  24.     _uchar     psti_status,
  25.         psti_count;
  26.     short    psto,
  27.         *pcad;
  28.     long    prnh;
  29.     short    prcl,
  30.         pres,
  31.         _pch;        /* gamma extension */
  32.     long    _fsize;        /* gamma extension */
  33.         short   _disk;          /* gamma extension */
  34.     };
  35.  
  36. struct cpd_pkt {
  37.     short    cftyp,
  38.         chfs;
  39.     long    *ctim;
  40.     char    *cacp;
  41.     long     cmsh;
  42.     short    cmil,
  43.         cmrs;
  44.     };
  45.  
  46. struct create_pkt {
  47.     short    cftyp,
  48.         ccps;
  49.     long    *ctim;
  50.     char    *cacp;
  51.     short    cdeh,
  52.         cdel,
  53.         cmil,
  54.         cmrs;
  55.     };
  56.  
  57. struct _msg_pkt {
  58.     short     greq,
  59.         gnum;
  60.     char    *gsw,
  61.         *gres;
  62.     };
  63.  
  64. struct exec_pkt {
  65.     short    xrfnc,
  66.         xfp1;
  67.     char    *xfp2;
  68.     };
  69.  
  70. struct gnfn_pkt {
  71.     short    nfky,
  72.         nfrs;
  73.     char    *nfnm,
  74.         *nftp;
  75.     };
  76.  
  77. struct dir_pkt{ /* pseudo-packet */
  78.         short           ich, isti;      /* channel and options */
  79.         char *          path;           /* saved pathname of dir */
  80.         char *          endpath;        /* place to cat fname    */
  81.         char *          buf;            /* charptr to direct struct */
  82.         char *          cur;            /* current buffer pos */
  83.         struct gnfn_pkt pkt;            /* packet to use for gnfn */
  84.         };
  85.  
  86. #define MAXPIPE 1024/*for now*/
  87.  
  88. struct pipe_member_t{ /* info of a single pipe member */
  89.         int             lock, sleeping; /* double word aligned */
  90.         short           count,          /* number of this type member */
  91.                         index;          /* ring buffer index */
  92.         };
  93.  
  94. struct pipe_buf_t{ /* 'shape' of shared memory used by pipes */
  95.         struct
  96.           pipe_member_t reader, writer; /* parties to this pipe */
  97.         char            data[ MAXPIPE ];/* ring buffer */
  98.         };
  99.  
  100. struct pipe_pkt{ /* pseudo-packet */
  101.         short                ich, isti; /* channel and options */
  102.         struct pipe_buf_t *  buf;       /* shared memory for pipe */
  103.         };
  104.  
  105. struct gopn_pkt {
  106.     short    opch,
  107.         opty,
  108.         opfc,
  109.         opew;
  110.     long    opeh;
  111.     };
  112.  
  113. struct ipc_pkt {
  114.     short    isfl,
  115.         iufl,
  116.         idph,
  117.         idpl,
  118.         iopn,
  119.         ilth,
  120.         *iptr;
  121.     };
  122.  
  123. struct io_pkt {
  124.     short    ich,
  125.         isti,
  126.         isto,
  127.         imrs;
  128.     char    *ibad;
  129.     short    ires,
  130.         ircl,
  131.         irlr,
  132.         irnw;
  133.     long    irnh;
  134.     char    *ifnp;
  135.     short    *idel,
  136.         *etsp,
  137.         *etft,
  138.         *etlt,
  139.         *enet;
  140.  
  141.     short    esfc,
  142.         esep;
  143.     _uchar    escr_col,
  144.         escr_row;
  145.     };
  146.  
  147. struct proc_pkt {
  148.     short    pflg,
  149.         ppri;
  150.     char    *psnm;
  151.     short    *pipc;
  152.     char    *pnm;
  153.     long    pmem;
  154.     char    *pdir,
  155.         *pcon;
  156.     short    pcal,
  157.         pwss;
  158.     char    *punm;
  159.     short    pprv,
  160.         ppcr,
  161.         pwmi,
  162.         p_gotcha;        /* it ain't documented */
  163.     char    *pifp,
  164.         *pofp,
  165.         *plfp,
  166.         *pdfp;
  167.     long     smch;
  168.     short    plth;
  169.     };
  170.  
  171. struct runtm_pkt {
  172.     long    grr,
  173.         grc,
  174.         gri,
  175.         grp;
  176.     };
  177.  
  178. struct stat_pkt {
  179.     short    styp,
  180.         stim,
  181.         sacp,
  182.         scps,
  183.         slau;
  184.     long    sdeh;
  185.     short    smil;
  186.     unsigned short    stch,
  187.             stcl,
  188.             stah,
  189.             stal,
  190.             stmh,
  191.             stml;
  192.     short    ssts,
  193.         sefw,
  194.         sefh;
  195.     long    sefm,
  196.         sfah;
  197.     short    sidx,
  198.         sopn;
  199.     long    scsh;
  200.     };
  201.  
  202.  
  203. /***************    F I L E   I N F O   **************************/
  204.  
  205.     /* the i/o packet for use in chnl_info */
  206.  
  207. typedef union {
  208.     struct    io_pkt      nio;        /* normal i/o */
  209.     struct    gopn_pkt  gopn;        /* block open */
  210.         struct  blk_pkt   bio;          /* block i/o */
  211.         struct  dir_pkt   dio;          /* directory i/o */
  212.         struct  pipe_pkt  pio;          /* pipe i/o */
  213.     } io_blk;
  214.  
  215.     /* the channel info block */
  216.  
  217. struct ch_info {            /* channel info */
  218.     io_blk    pkt;            /* the AOS io pkt */
  219.     int    (*_read)(),        /* ptr to read routine */
  220.         (*_write)(),        /* ptr to write routine */
  221.         (*_close)();        /* ptr to close routine */
  222.     short     oc,            /* open count */
  223.         f_mode,            /* mode used to open */
  224.         f_info;            /* see info defines */
  225.         };
  226.  
  227.         /* mode values for open */
  228.  
  229. #define RW    2
  230. #define WO    1
  231. #define RO     0
  232. #define DSR    -1
  233. #define CWRIT    -2
  234. #define APPND    -3
  235. #define XO    -4        /* exclusive - create - I/O */
  236. #define APIO    -5        /* read/write append */
  237. #define UPD    -6        /* update */
  238. #define BINR    -7        /* binary read */
  239. #define BINW    -8        /* binary write */
  240. #define CRW     -9              /* create & open RW */
  241.  
  242. #define LAST_NORMAL     CRW     /* update when adding nio type open */
  243.         /* DG specific open modes */
  244. #define BLK    -50
  245. #define SPG    -51
  246.         /* pseudo-packet modes */
  247. #define PR      -100            /* pipe read */
  248. #define PW      -101            /* pipe write */
  249. #define DIRMODE -102            /* directory read */
  250. #define RSRV    -103            /* reserve a descriptor & chnl blk */
  251.     /* pseudo opens - used by exec */
  252. #define DUPFIL    -120
  253.  
  254.     /* defines for dealing with file open modes */
  255. #define NIO_MODE(mode)    (mode>=LAST_NORMAL)
  256.  
  257.     /* define to obtain AOS pkt location */
  258.  
  259. #define GET_PKT(fd)    _fdl[fd]
  260.  
  261. /****************    G L O B A L S     ******************************/
  262.  
  263.  
  264. struct ch_info          _chnl_blk       [NFILZ],
  265.                 *       _fdl            [NFILZ];
  266. char                    _clex           [NFILZ];
  267.